/**
 * MP4 Reader Worker
 * 
 * 职责：
 * 1. 批量读取 sample 数据
 * 2. 预处理数据
 * 3. 发送回主线程
 * 
 * 不在 Worker 中做：
 * - Muxer 操作（需要主线程的 WebCodecs）
 * - MP4Box 解析（需要主线程）
 */

self.onmessage = async function(e) {
    const { type, data } = e.data

    try {
        switch (type) {
            case 'READ_BATCH':
                await readBatch(data)
                break
            
            default:
                console.error('Unknown message type:', type)
        }
    } catch (error) {
        self.postMessage({
            type: 'ERROR',
            error: error.message
        })
    }
}

/**
 * 批量读取 samples
 */
async function readBatch({ file, samples, batchIndex }) {
    try {
        // 批量读取所有 sample 数据
        const readPromises = samples.map(sample => {
            const sampleBlob = file.slice(sample.offset, sample.offset + sample.size)
            return sampleBlob.arrayBuffer()
        })

        const buffers = await Promise.all(readPromises)

        // 转换为可传输的格式
        const sampleDataArray = buffers.map(buffer => new Uint8Array(buffer))

        // 发送回主线程（使用 Transferable Objects 避免拷贝）
        self.postMessage({
            type: 'BATCH_READY',
            batchIndex,
            sampleDataArray,
            count: samples.length
        }, sampleDataArray.map(data => data.buffer))

    } catch (error) {
        self.postMessage({
            type: 'ERROR',
            error: error.message,
            batchIndex
        })
    }
}
